      1  /**

      2     A stopwatch accumulates time when it is running. You can

      3     repeatedly start and stop the stopwatch. You can use a

      4     stopwatch to measure the running time of a program.

      5  */

      6  public class StopWatch

      7  {

      8     private long elapsedTime;

      9     private long startTime;

     10     private boolean isRunning;

     11

     12     /**

     13        Constructs a stopwatch that is in the stopped state

     14        and has no time accumulated.

     15     */

     16     public StopWatch()

     17     {

     18        reset();

     19     }

     20

     21     /**

     22        Starts the stopwatch. Time starts accumulating now.

     23     */

     24     public void start()

     25     {

     26        if (isRunning) { return; }

     27        isRunning = true;

     28        startTime = System.currentTimeMillis();

     29     }

     30

     31     /**

     32        Stops the stopwatch. Time stops accumulating and is

     33        is added to the elapsed time.

     34     */

     35     public void stop()

     36     {

     37        if (!isRunning) { return; }

     38        isRunning = false;

     39        long endTime = System.currentTimeMillis();

     40        elapsedTime = elapsedTime + endTime - startTime;

     41     }

     42

     43     /**

     44        Returns the total elapsed time.

     45        @return the total elapsed time

     46     */

     47     public long getElapsedTime()

     48     {

     49        if (isRunning)

     50        {

     51           long endTime = System.currentTimeMillis();

     52           return elapsedTime + endTime - startTime;

     53        }

     54        else

     55        {

     56           return elapsedTime;

     57        }

     58     }

     59

     60     /**

     61        Stops the watch and resets the elapsed time to 0.

     62     */

     63     public void reset()

     64     {

     65        elapsedTime = 0;

     66        isRunning = false;

     67     }

     68  }